//
//  ZMUserAccountViewModel.swift
//  ZMWeiboSwift
//
//  Created by pg on 2017/7/25.
//  Copyright © 2017年 pg. All rights reserved.
//

import UIKit

class ZMUserAccountViewModel: NSObject {

    //创建单例全局访问点
    static let sharedViewModel : ZMUserAccountViewModel = ZMUserAccountViewModel()
    //用户模型属性
    var userAccountModel : ZMUserAccountModel?
    
    //用户令牌
    var accessToken: String?{
        guard let token = userAccountModel?.access_token else {
            //没有获取到令牌,返回nil
            return nil
        }
        //执行到此,说明token肯定有值,判断token是否过期
        let result = userAccountModel?.expiresDate?.compare(Date())
        if result == ComparisonResult.orderedDescending {
            //表示没有过期
            return token
        }
        
        return nil
        
    }
    
    
    //属性,用于标记是否登录
    var islogin : Bool {
        
        return accessToken != nil
    }
    
    
    
    override init() {
        super.init()
        
        //访问viewmodel的时候从本地读取用户模型数据
        userAccountModel = ZMUserAccountModel.loaduserAccountModel()
    }
    
    //通过code授权吗获取令牌(AccessToKen)
    func requestAccessToKen(code: String ,callBack:@escaping (Bool)->()){
        
        ZMNetworkingManager.sharedManager.requestAccessToken(code: code) { (reponse, error) in
            if error != nil{
                print("error:\(error!)")
                callBack(false)
                return
            }
            //将接受到的数据转成对应的字典
            let dic  = reponse as! [String:Any]
            //将字典数据转变成模型数据
            let userAccessModel = ZMUserAccountModel(dic: dic)
            
            self.requestUserInfo(userAccount: userAccessModel, callBack: callBack)
        }
    }
    //通过令牌获取用户信息
    func requestUserInfo(userAccount: ZMUserAccountModel , callBack:@escaping (Bool)->()){
        //获取令牌
        let token = userAccount.access_token!
        //用户id
        let uid = userAccount.uid
        
        
        //根据令牌获取用户信息
        ZMNetworkingManager.sharedManager.requestUserInfo(access_token: token, uid: uid) { (response, error) in
            
            if error != nil{
                print("error:\(error!)")//网络错误,打印错误信息
                callBack(false)
                return
            }
            //到这里说明网络没有错误, 将获取到的网络数据转变成字典
            let dic = response as! [String : Any]
            //将字典中的用户名称和配图信息赋值给用户信息模型
            userAccount.name = dic["name"] as? String
            userAccount.avatar_large = dic["avatar_large"] as? String
            
            //到这里说明登录成功,需要将用户信息保存到本地中
            userAccount.saveUserAccount()
            
            //记录用户模型
            self.userAccountModel = userAccount
            callBack(true)
            
        }
        
    }

    
    
    
}
